import axios from 'axios';

// AI模型配置
const API_CONFIG = {
  mode: 'gpt-4o-image-vip', // 或者使用 'gpt-4o-image', 'gpt-4-all'
  baseUrl: 'https://yunwu.zeabur.app/v1/chat/completions',
  apiKey: 'sk-TsBRwtPOiNZ7ZuSi5uuf2amb7Z7MY1A21Xkn9uPVcnKhBW1X'
};

/**
 * 将图像编码为base64
 * @param {string} imageUrl - 图像URL或数据URL
 * @returns {Promise<string>} - base64编码的图像
 */
const getBase64FromImage = async (imageUrl) => {
  // 如果已经是数据URL，直接提取base64部分
  if (imageUrl.startsWith('data:')) {
    return imageUrl.split(',')[1];
  }

  // 否则，获取图像并转换为base64
  try {
    const response = await fetch(imageUrl);
    const blob = await response.blob();
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.onloadend = () => {
        const base64String = reader.result.split(',')[1];
        resolve(base64String);
      };
      reader.onerror = reject;
      reader.readAsDataURL(blob);
    });
  } catch (error) {
    console.error('获取图像base64失败:', error);
    throw error;
  }
};

/**
 * 生成风格化图像
 * @param {string} imageBase64 - base64编码的图像
 * @param {string} styleDescription - 风格描述或提示
 * @returns {Promise<string>} - 生成的图像URL
 */
export const generateStyledImage = async (imageUrl, styleDescription, styleName) => {
  try {
    const imageBase64 = await getBase64FromImage(imageUrl);

    // 构建完整的提示
    let prompt = styleDescription;
    if (styleName && styleName !== 'custom' && styleName !== 'none') {
      prompt = `将这张图片转换为${styleName}风格。${styleDescription}`;
    }

    // 构建API请求
    const payload = {
      model: API_CONFIG.mode,
      messages: [
        {
          role: "user",
          content: [
            { type: "text", text: prompt },
            {
              type: "image_url",
              image_url: {
                url: `data:image/jpeg;base64,${imageBase64}`
              }
            }
          ]
        }
      ]
    };

    // 发送请求到AI模型API
    console.log('发送请求到API:', API_CONFIG.baseUrl);
    const response = await axios.post(API_CONFIG.baseUrl, payload, {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${API_CONFIG.apiKey}`
      }
    });

    // 调试输出响应结构
    console.log('API响应结构:', JSON.stringify(response.data, null, 2));

    // 解析响应，获取结果图像URL
    if (response.data && response.data.choices && response.data.choices.length > 0) {
      const messageContent = response.data.choices[0].message.content;
      console.log('messageContent:', messageContent);

      // 从 Markdown 格式的响应中提取图片 URL
      const imageMatch = messageContent.match(/!\[.*?\]\((.*?)\)/);
      if (imageMatch && imageMatch[1]) {
        return imageMatch[1];
      }

      // 如果上面的处理都没有找到图像URL，记录完整响应并抛出错误
      console.error('无法从响应中提取图像URL。完整响应:', response.data);
      throw new Error('API响应中未找到生成的图像');
    }

  } catch (error) {
    console.error('生成风格化图像失败:', error);
    throw error;
  }
};

export default {
  generateStyledImage
}; 